﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cesave.Domain.PermisosModule.Entities;
using Cesave.Domain.Core;
using System.Collections;
using Cesave.Domain.PermisosModule.Contracts.CultivosFechas;
using Cesave.Domain.PermisosModule.Contracts.CiclosFechas;

namespace Cesave.Domain.PermisosModule.Contracts.Cultivos
{
	/// <summary>
	/// 
	/// </summary>
	public interface ICultivoRepository
		: IRepositoryEx<Cultivo>
	{
		/// <summary>
		/// 
		/// </summary>
		/// <param name="specification"></param>
		/// <returns></returns>
		IEnumerable<Cultivo> FindCultivosByClasificacion(CultivosByClasificacionSpecification specification);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="specification"></param>
		/// <returns></returns>
		IEnumerable<Cultivo> FindCultivosByEstacion(CultivosByEstacionSpecification specification);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="specification"></param>
		/// <returns></returns>
		IEnumerable<Cultivo> FindCultivosByStatus(CultivosByStatusSpecification specification);

		/// <summary>
		/// Encuentra los cultivos que se pueden mostrar en la expedición
		/// de acuerdo con las especificaciones.
		/// </summary>
		/// <param name="statusSpecification"></param>
		/// <param name="cultivoSpecification"></param>
		/// <param name="cicloSpecification"></param>
		/// <param name="juntaSpecification"></param>
		/// <param name="dateSpecification"></param>
		/// <returns></returns>
		IEnumerable<Cultivo> FindCultivosForExpedicion(
			CultivosByStatusSpecification statusSpecification,
			CiclosFechasByCicloSpecification cicloSpecification,
			CultivosFechasByJuntaSpecification juntaSpecification,
			CiclosFechasByDateRangeSpecification dateSpecification
		);

	}
}
